package com.shiguiwu.springmybatis.algorithm.sort;

/**
 * @description: 选择排序
 * 给定一个值，然后和余下数字比较，但是不交换，等到比完过后在交换
 * @author: stone
 * @date: Created by 2021/3/15 23:35
 * @version: 1.0.0
 * @pakeage: com.shiguiwu.springmybatis.algorithm.sort
 */
public  class SelectSort extends AbstractSort  implements Sort{

    public SelectSort(int[] array) {
        super(array);
    }

    @Override
    public void sort() {
        int length = array.length;
        int min = 0;
        int minIndex = 0;
        for (int i = 0; i < length-1; i++) {
            minIndex = i;//假定为最小值
            min = array[i];
            for (int j = i + 1; j < length; j++) {
                //说明假定的最小值不是最小值
                if (min > array[j]) {
                    //重置index
                    minIndex = j;
                    //重置min的值
                    min = array[j];
                }
            }

            if (minIndex != i) {
                //交换，并且是发生过重置的，比如最小值索引是4，当前比较的是2，arr[4]=arr[2] arr[4] = min
                array[minIndex] = array[i];
                array[i] = min;
            }


        }
    }
}
